package com.flyme.module.base.provider.service;

import com.flyme.core.base.supper.service.IBaseService;
import com.flyme.module.base.client.entity.SystemRole;

import java.util.List;

/**
 * 角色管理
 *
 * @author zyf
 */
public interface SysRoleService extends IBaseService<SystemRole> {

    /**
     * 添加角色
     *
     * @param role 角色
     * @return
     */
    Boolean addRole(SystemRole role);

    /**
     * 更新角色
     *
     * @param role 角色
     * @return
     */
    Boolean updateRole(SystemRole role);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return
     */
    Boolean removeRole(Long roleId);

    /**
     * 检测角色编码是否存在
     *
     * @param roleCode
     * @return
     */
    Boolean isExist(String roleCode);

    /**
     * 角色授权组员
     *
     * @param userId
     * @param roles
     * @return
     */
    Boolean saveUserRoles(Long userId, Long... roles);

    Boolean saveUserRoles(Long userId, String... roleCode);

    /**
     * 获取角色所有授权组员数量
     *
     * @param roleId
     * @return
     */
    int getCountByRole(String roleId);

    /**
     * 获取组员角色数量
     *
     * @param userId
     * @return
     */
    int getCountByUser(Long userId);

    /**
     * 移除角色所有组员
     *
     * @param roleId
     * @return
     */
    Boolean removeRoleUsers(Long roleId);

    /**
     * 删除用户角色
     *
     * @param userIds
     * @return
     */
    Boolean deleteByUserIds(Long[] userIds);

    /**
     * 删除角色
     *
     * @param roleIds
     * @return
     */
    Boolean delByRoleIds(String[] roleIds);

    /**
     * 移除组员的所有角色
     *
     * @param userId
     * @return
     */
    Boolean removeMemberRoles(Long userId);

    /**
     * 更新启用禁用
     *
     * @param roleId
     * @param status
     * @return
     */
    Boolean updateStatus(Long roleId, Integer status);


    /**
     * 更新启用禁用
     *
     * @param id
     * @param defaultRole
     * @return
     */
    Boolean setDefault(Long id, Integer defaultRole);

    /**
     * 检测是否存在
     *
     * @param userId
     * @param roleId
     * @return
     */
    Boolean isExist(Long userId, Long roleId);

    /**
     * 获取组员角色
     *
     * @param userId
     * @return
     */
    List<SystemRole> getUserRoles(Long userId);

    /**
     * 获取角色列表
     *
     * @return
     */
    List<SystemRole> selertRoleList();

    /**
     * 查询账户拥有角色
     */
    List<Long> selectRoleIdsByUserId(Long userId);

    /**
     * 根据roleCode查询权限
     */
    SystemRole findByRoleCode(String roleCode);

}
